[INFO] cloning repository https://github.com/nexaedge/claude-permissions-hook
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/nexaedge/claude-permissions-hook" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fnexaedge%2Fclaude-permissions-hook", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fnexaedge%2Fclaude-permissions-hook'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 174fe6e41489d524862230a0fcfc05ac6aaedebe
[INFO] testing nexaedge/claude-permissions-hook against try#0abe69e6c16114311cc2700e972492e64d69c28f for pr-154065-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fnexaedge%2Fclaude-permissions-hook" "/workspace/builds/worker-6-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/nexaedge/claude-permissions-hook
[INFO] finished tweaking git repo https://github.com/nexaedge/claude-permissions-hook
[INFO] tweaked toml for git repo https://github.com/nexaedge/claude-permissions-hook written to /workspace/builds/worker-6-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/nexaedge/claude-permissions-hook on toolchain 0abe69e6c16114311cc2700e972492e64d69c28f
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/nexaedge/claude-permissions-hook already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] dfd13801aa46b30b27ed955e195c113e3b16bcdb4a796134a7849e9d4a7f5ae0
[INFO] running `Command { std: "docker" "start" "-a" "dfd13801aa46b30b27ed955e195c113e3b16bcdb4a796134a7849e9d4a7f5ae0", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "dfd13801aa46b30b27ed955e195c113e3b16bcdb4a796134a7849e9d4a7f5ae0", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "dfd13801aa46b30b27ed955e195c113e3b16bcdb4a796134a7849e9d4a7f5ae0", kill_on_drop: false }`
[INFO] [stdout] dfd13801aa46b30b27ed955e195c113e3b16bcdb4a796134a7849e9d4a7f5ae0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 39984138ea459d89e5686b226fccb043d3f78ac045404b784187d4541a5d42c0
[INFO] running `Command { std: "docker" "start" "-a" "39984138ea459d89e5686b226fccb043d3f78ac045404b784187d4541a5d42c0", kill_on_drop: false }`
[INFO] [stderr]    Compiling unicode-ident v1.0.23
[INFO] [stderr]    Compiling ident_case v1.0.1
[INFO] [stderr]    Compiling fnv v1.0.7
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling zerocopy v0.8.39
[INFO] [stderr]    Compiling prettyplease v0.2.37
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling allocator-api2 v0.2.21
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]    Compiling peg-runtime v0.8.5
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling clap_lex v1.0.0
[INFO] [stderr]    Compiling arrayvec v0.7.6
[INFO] [stderr]    Compiling cached_proc_macro_types v0.1.1
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling regex-syntax v0.8.9
[INFO] [stderr]    Compiling clap_builder v4.5.58
[INFO] [stderr]    Compiling miette v7.6.0
[INFO] [stderr]    Compiling winnow v0.6.24
[INFO] [stderr]    Compiling indenter v0.3.4
[INFO] [stderr]    Compiling utf8-chars v3.0.6
[INFO] [stderr]    Compiling hashbrown v0.15.5
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling bstr v1.12.1
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling num-integer v0.1.46
[INFO] [stderr]    Compiling num-complex v0.4.6
[INFO] [stderr]    Compiling quote v1.0.44
[INFO] [stderr]    Compiling syn v2.0.115
[INFO] [stderr]    Compiling peg-macros v0.8.5
[INFO] [stderr]    Compiling num-bigint v0.4.6
[INFO] [stderr]    Compiling num-iter v0.1.45
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling peg v0.8.5
[INFO] [stderr]    Compiling num-rational v0.4.2
[INFO] [stderr]    Compiling num v0.4.3
[INFO] [stderr]    Compiling kdl v6.5.0
[INFO] [stderr]    Compiling globset v0.4.18
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling darling_core v0.20.11
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling clap_derive v4.5.55
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling clap v4.5.58
[INFO] [stderr]    Compiling darling_macro v0.20.11
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling darling v0.20.11
[INFO] [stderr]    Compiling bon-macros v3.9.0
[INFO] [stderr]    Compiling cached_proc_macro v0.25.0
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling cached v0.56.0
[INFO] [stderr]    Compiling bon v3.9.0
[INFO] [stderr]    Compiling brush-parser v0.3.0
[INFO] [stderr]    Compiling claude-permissions-hook v0.5.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 41.67s
[INFO] running `Command { std: "docker" "inspect" "39984138ea459d89e5686b226fccb043d3f78ac045404b784187d4541a5d42c0", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "39984138ea459d89e5686b226fccb043d3f78ac045404b784187d4541a5d42c0", kill_on_drop: false }`
[INFO] [stdout] 39984138ea459d89e5686b226fccb043d3f78ac045404b784187d4541a5d42c0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 64b803d0a7af70705deca5ac7de8ef63ccc46ae510182261f0929b8a8970f996
[INFO] running `Command { std: "docker" "start" "-a" "64b803d0a7af70705deca5ac7de8ef63ccc46ae510182261f0929b8a8970f996", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.182
[INFO] [stderr]    Compiling getrandom v0.4.1
[INFO] [stderr]    Compiling rustix v1.1.3
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling tempfile v3.25.0
[INFO] [stderr]    Compiling claude-permissions-hook v0.5.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 7.04s
[INFO] running `Command { std: "docker" "inspect" "64b803d0a7af70705deca5ac7de8ef63ccc46ae510182261f0929b8a8970f996", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "64b803d0a7af70705deca5ac7de8ef63ccc46ae510182261f0929b8a8970f996", kill_on_drop: false }`
[INFO] [stdout] 64b803d0a7af70705deca5ac7de8ef63ccc46ae510182261f0929b8a8970f996
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 90f6861c92beeedbfc0005f6732868ece8db1c2aef4631e60162525d2cadccc6
[INFO] running `Command { std: "docker" "start" "-a" "90f6861c92beeedbfc0005f6732868ece8db1c2aef4631e60162525d2cadccc6", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.17s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/claude_permissions_hook-2eb661567e6dfcf1)
[INFO] [stdout] 
[INFO] [stdout] running 364 tests
[INFO] [stdout] test command::tests::args_double_dash_stops_flag_expansion ... ok
[INFO] [stdout] test command::tests::args_env_var_excluded ... ok
[INFO] [stdout] test command::tests::args_flag_expansion ... ok
[INFO] [stdout] test command::tests::absolute_path_normalizes_to_basename ... ok
[INFO] [stdout] test command::tests::args_pipe_each_segment_has_own_args ... ok
[INFO] [stdout] test command::tests::args_long_flag_and_positionals ... ok
[INFO] [stdout] test command::tests::case_clause_body_programs_extracted ... ok
[INFO] [stdout] test command::tests::args_redirection_excluded ... ok
[INFO] [stdout] test command::tests::env_chdir_skips_consumed_argument ... ok
[INFO] [stdout] test command::tests::env_s_attached_form ... ok
[INFO] [stdout] test command::tests::env_split_string_no_trailing_args_still_works ... ok
[INFO] [stdout] test command::tests::env_split_string_parses_command ... ok
[INFO] [stdout] test command::tests::env_split_string_equals_form ... ok
[INFO] [stdout] test command::tests::chain_with_and ... ok
[INFO] [stdout] test command::tests::command_wrapper_unwraps_to_real_program ... ok
[INFO] [stdout] test command::tests::env_split_string_equals_trailing_args ... ok
[INFO] [stdout] test command::tests::empty_input ... ok
[INFO] [stdout] test command::tests::env_split_string_trailing_args_with_flags ... ok
[INFO] [stdout] test command::tests::env_u_skips_consumed_argument ... ok
[INFO] [stdout] test command::tests::env_split_string_trailing_args_appended ... ok
[INFO] [stdout] test command::tests::env_unset_long_skips_consumed_argument ... ok
[INFO] [stdout] test command::tests::args_simple_subcommand ... ok
[INFO] [stdout] test command::tests::exec_a_skips_consumed_argument ... ok
[INFO] [stdout] test command::tests::env_split_string_with_other_options ... ok
[INFO] [stdout] test command::tests::builtin_wrapper_unwraps_to_real_program ... ok
[INFO] [stdout] test command::tests::env_wrapper_unwraps_to_real_program ... ok
[INFO] [stdout] test command::tests::expand_flags_double_dash_unchanged ... ok
[INFO] [stdout] test command::tests::env_wrapper_skips_options_and_assignments ... ok
[INFO] [stdout] test command::tests::expand_flags_combined_short_flags ... ok
[INFO] [stdout] test command::tests::expand_flags_long_flag_unchanged ... ok
[INFO] [stdout] test command::tests::expand_flags_positional_unchanged ... ok
[INFO] [stdout] test command::tests::expand_flags_single_short_flag_unchanged ... ok
[INFO] [stdout] test command::tests::nested_wrappers_fully_unwrapped ... ok
[INFO] [stdout] test command::tests::expand_flags_with_equals_unchanged ... ok
[INFO] [stdout] test command::tests::quoted_operators_not_split ... ok
[INFO] [stdout] test command::tests::nohup_wrapper_unwraps_to_real_program ... ok
[INFO] [stdout] test command::tests::semicolon_operator ... ok
[INFO] [stdout] test command::tests::expand_flags_three_chars ... ok
[INFO] [stdout] test command::tests::pipe_operator ... ok
[INFO] [stdout] test command::tests::mixed_operators ... ok
[INFO] [stdout] test command::tests::skip_multiple_env_vars ... ok
[INFO] [stdout] test command::tests::skip_single_env_var ... ok
[INFO] [stdout] test command::tests::single_quoted_pipe_not_split ... ok
[INFO] [stdout] test command::tests::subshell_commands_extracted ... ok
[INFO] [stdout] test command::tests::simple_command ... ok
[INFO] [stdout] test command::tests::env_multiple_consuming_options ... ok
[INFO] [stdout] test command::tests::or_operator ... ok
[INFO] [stdout] test command::tests::trailing_operator_is_invalid_syntax ... ok
[INFO] [stdout] test command::tests::wrapper_nohup_forwards_args ... ok
[INFO] [stdout] test command::tests::wrapper_command_forwards_args ... ok
[INFO] [stdout] test command::tests::wrapper_double_dash_stops_flag_expansion ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_classification_flag_position_irrelevant ... ok
[INFO] [stdout] test command::tests::wrapper_env_forwards_args ... ok
[INFO] [stdout] test command::tests::whitespace_only_input ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_classification_long_flag ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_classification_standard_flags ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_classification_stdin_dash_is_positional ... ok
[INFO] [stdout] test command::tests::exec_wrapper_unwraps_to_real_program ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_empty_conditions_with_flags_and_positionals ... ok
[INFO] [stdout] test command::tests::expand_flags_bare_dash_unchanged ... ok
[INFO] [stdout] test command::tests::relative_path_normalizes_to_basename ... ok
[INFO] [stdout] test command::tests::wrapper_without_arguments_yields_wrapper_itself ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_classification_double_dash_stops_flags ... ok
[INFO] [stdout] test command::tests::function_body_programs_extracted ... ok
[INFO] [stdout] test command::tests::wrapper_with_absolute_path ... ok
[INFO] [stdout] test command::tests::env_split_string_long_form_parses_command ... ok
[INFO] [stdout] test command::tests::env_p_skips_consumed_argument ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_empty_subcommands_matches_any ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_empty_conditions_with_subcommand_and_flag ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_inline_subcommand_and_children_subcommands_both_pass ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_optional_flags_both_present ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_optional_flags_second_present ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_optional_flags_first_present ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_required_flags_both_present ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_required_flags_extra_flag_ok ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_positional_exact_root ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_positional_with_flags_stripped ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_required_argument_before_double_dash ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_required_argument_next_arg ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommand_and_positional ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommand_and_positional_extra_args ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_positional_any_order ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_required_flags_only_no_positionals ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_program_basename_absolute_path ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_required_argument_equals_form ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_required_flags_position_irrelevant ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommand_empty_always_matches ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_empty_conditions_with_no_args ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_empty_subcommands_matches_no_args ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommand_with_interleaved_flags ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommand_prefix ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommand_exact ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_and_optional_flags_second_flag ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_positional_glob_single_level ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_and_positionals_both_pass ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_and_required_flags ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_and_required_flags_flag_at_end ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_and_required_flags_flag_before ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_first_chain ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_mcp_list_exact ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_multi_word_flag_end ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_and_optional_flags_first_flag ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_multi_word_flag_middle ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_multi_word_exact ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_mcp_remove ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_mcp_add ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_multi_word_flag_before ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_and_positionals_with_flags ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_second_chain_with_flag ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommands_third_chain_with_extra_args ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_children_subcommands_ok_inline_subcommand_miss ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_flags_ok_subcommands_wrong ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_optional_flags_neither_present ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_inline_subcommand_ok_children_subcommands_miss ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_optional_flags_ok_subcommands_wrong ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_optional_flags_wrong_flag ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_required_flags_missing_f ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_positional_glob_nested ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_positional_no_leading_slash ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_required_flags_none_present ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_required_argument_equals_after_double_dash ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_positionals_ok_subcommands_wrong ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_subcommand_too_few_args ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_required_flags_missing_r ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_program_different_name ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_required_argument_after_double_dash ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_positional_none_matching ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_positional_one_missing ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_subcommand_ok_positional_missing ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_subcommand_wrong_order_with_positional ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_required_argument_flag_not_present ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_required_argument_flag_no_value ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_subcommands_mcp_wrong_sub ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_subcommands_multi_word_too_few ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_subcommands_multi_word_wrong_order ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_subcommands_not_in_any_chain ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_subcommands_ok_optional_flags_missing ... ok
[INFO] [stdout] test config::match_rule::files::tests::lookup_allow_matches ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_subcommand_wrong_order ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_subcommands_ok_flags_missing ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_subcommand_wrong_second ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_subcommands_mcp_wrong_order ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_subcommands_ok_positionals_missing ... ok
[INFO] [stdout] test config::match_rule::files::tests::lookup_expansion_error_in_deny_tier_returns_ask ... ok
[INFO] [stdout] test config::match_rule::bash::tests::no_match_subcommands_wrong_command ... ok
[INFO] [stdout] test config::match_rule::files::tests::lookup_expansion_error_only_for_other_operation_does_not_affect_lookup ... ok
[INFO] [stdout] test config::normalize::bash::tests::normalize_subcommand_chains_empty_subcommands_noop ... ok
[INFO] [stdout] test config::normalize::bash::tests::normalize_subcommand_chains_empty_subcommand_noop ... ok
[INFO] [stdout] test config::normalize::bash::tests::normalize_subcommand_chains_multiple_chains ... ok
[INFO] [stdout] test config::normalize::bash::tests::normalize_subcommand_chains_prepends_and_clears ... ok
[INFO] [stdout] test config::match_rule::files::tests::lookup_ask_matches ... ok
[INFO] [stdout] test config::match_rule::files::tests::lookup_wrong_operation_returns_none ... ok
[INFO] [stdout] test config::match_rule::files::tests::lookup_cwd_expansion ... ok
[INFO] [stdout] test config::match_rule::files::tests::lookup_deny_wins_over_allow ... ok
[INFO] [stdout] test config::normalize::files::tests::cwd_variable_unchanged ... ok
[INFO] [stdout] test config::match_rule::files::tests::lookup_no_match_returns_none ... ok
[INFO] [stdout] test config::match_rule::files::tests::lookup_deny_matches ... ok
[INFO] [stdout] test config::normalize::files::tests::home_variable_expanded ... ok
[INFO] [stdout] test config::normalize::files::tests::cwd_and_home_variable_partial_expand ... ok
[INFO] [stdout] test config::normalize::files::tests::no_home_variable_unchanged ... ok
[INFO] [stdout] test config::parse::bash::tests::error_children_without_entry ... ok
[INFO] [stdout] test config::parse::bash::tests::error_multi_segment_inline_rule ... ok
[INFO] [stdout] test config::parse::bash::tests::error_multi_entry_with_children ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_children_optional_flags ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_children_subcommands ... ok
[INFO] [stdout] test config::normalize::files::tests::tilde_expanded ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_children_flags_normalization ... ok
[INFO] [stdout] test config::match_rule::files::tests::lookup_cwd_expansion_outside_cwd ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_children_positionals_glob ... ok
[INFO] [stdout] test config::parse::bash::tests::error_includes_correct_line_number ... ok
[INFO] [stdout] test config::parse::bash::tests::inline_subcommand_with_children_subcommands_normalized ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_children_named_positional_matcher ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_inline_with_tab_whitespace_parses_args ... ok
[INFO] [stdout] test config::parse::bash::tests::inline_subcommand_with_multiple_children_chains ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_double_dash_goes_to_required_flags ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_inline_with_children_extends_conditions ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_multiple_programs_on_one_node ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_inline_flags_only ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_inline_with_flags_and_positional ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_invalid_glob_returns_error ... ok
[INFO] [stdout] test config::parse::files::tests::backwards_compat_bash_only_config ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_inline_with_subcommand_and_flag ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_simple_program_name ... ok
[INFO] [stdout] test config::parse::files::tests::all_operations_parse ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_invalid_inline_rule_returns_error ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_invalid_required_arguments_format ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_children_required_arguments ... ok
[INFO] [stdout] test config::parse::files::tests::error_flat_rule_no_values ... ok
[INFO] [stdout] test config::parse::files::tests::error_operation_case_sensitive ... ok
[INFO] [stdout] test command::tests::command_wrapper_with_option_skips_flags ... ok
[INFO] [stdout] test config::parse::files::tests::error_path_block_tier_non_string_entry ... ok
[INFO] [stdout] test config::parse::files::tests::error_flat_rule_non_string_entry ... ok
[INFO] [stdout] test config::parse::files::tests::error_path_block_empty_children ... ok
[INFO] [stdout] test config::parse::files::tests::error_path_block_no_children ... ok
[INFO] [stdout] test config::parse::files::tests::error_unknown_operation ... ok
[INFO] [stdout] test config::parse::bash::tests::rule_children_required_flags ... ok
[INFO] [stdout] test config::match_rule::bash::tests::match_subcommand_empty_no_args ... ok
[INFO] [stdout] test config::rule::tests::compile_invalid_glob_returns_error ... ok
[INFO] [stdout] test config::parse::files::tests::error_flat_rule_path_only_no_operations ... ok
[INFO] [stdout] test config::parse::files::tests::flat_ask_rule ... ok
[INFO] [stdout] test config::parse::files::tests::no_files_section_returns_none ... ok
[INFO] [stdout] test config::rule::tests::compile_valid_glob ... ok
[INFO] [stdout] test config::parse::files::tests::error_path_block_unexpected_child ... ok
[INFO] [stdout] test config::parse::files::tests::flat_deny_rule ... ok
[INFO] [stdout] test config::rule::tests::unconditional_rule_with_empty_conditions ... ok
[INFO] [stdout] test decision::tests::aggregation::aggregate_deny_and_none ... ok
[INFO] [stdout] test config::parse::files::tests::path_first_block_allow ... ok
[INFO] [stdout] test config::parse::files::tests::mixed_flat_and_path_block ... ok
[INFO] [stdout] test config::parse::files::tests::error_path_block_tier_no_operations ... ok
[INFO] [stdout] test decision::tests::aggregation::aggregate_allow_and_none ... ok
[INFO] [stdout] test config::parse::files::tests::path_block_multiple_tiers ... ok
[INFO] [stdout] test config::parse::files::tests::multiple_flat_rules_same_tier_merge ... ok
[INFO] [stdout] test config::rule::tests::conditional_rule_with_flags ... ok
[INFO] [stdout] test decision::tests::bash::absolute_path_allow ... ok
[INFO] [stdout] test decision::tests::bash::absolute_path_deny ... ok
[INFO] [stdout] test decision::tests::bash::allow_plus_unlisted ... ok
[INFO] [stdout] test decision::tests::bash::bash_tool_without_command_field_returns_ask ... ok
[INFO] [stdout] test decision::tests::aggregation::dont_ask_allow_stays ... ok
[INFO] [stdout] test decision::tests::bash::allow_plus_deny ... ok
[INFO] [stdout] test decision::tests::aggregation::dont_ask_deny_stays ... ok
[INFO] [stdout] test config::parse::files::tests::error_path_block_with_inline_values ... ok
[INFO] [stdout] test decision::tests::aggregation::aggregate_allow_and_deny ... ok
[INFO] [stdout] test decision::tests::aggregation::aggregate_all_none ... ok
[INFO] [stdout] test decision::tests::bash::both_unlisted ... ok
[INFO] [stdout] test decision::tests::bash::conditional_deny_miss_falls_through_to_allow ... ok
[INFO] [stdout] test decision::tests::bash::conditional_deny_miss_falls_through_to_ask ... ok
[INFO] [stdout] test decision::tests::bash::bypass_with_ask_returns_allow ... ok
[INFO] [stdout] test decision::tests::aggregation::aggregate_empty ... ok
[INFO] [stdout] test config::parse::files::tests::flat_allow_rule ... ok
[INFO] [stdout] test decision::tests::bash::default_with_ask_returns_ask ... ok
[INFO] [stdout] test decision::tests::aggregation::bypass_deny_stays_deny ... ok
[INFO] [stdout] test decision::tests::bash::no_config_non_bash_tool_returns_ask ... ok
[INFO] [stdout] test decision::tests::bash::single_allowed_program ... ok
[INFO] [stdout] test decision::tests::bash::dont_ask_with_ask_returns_deny ... ok
[INFO] [stdout] test decision::tests::bash::empty_command_returns_ask ... ok
[INFO] [stdout] test config::parse::files::tests::error_unknown_operation_includes_line_number ... ok
[INFO] [stdout] test decision::tests::bash::no_config_bash_tool_returns_ask ... ok
[INFO] [stdout] test decision::tests::aggregation::bypass_allow_stays_allow ... ok
[INFO] [stdout] test decision::tests::bash::both_allow ... ok
[INFO] [stdout] test decision::tests::bash::whitespace_command_returns_ask ... ok
[INFO] [stdout] test decision::tests::bash::wrapper_absolute_env_deny ... ok
[INFO] [stdout] test decision::tests::bash::wrapper_command_allow ... ok
[INFO] [stdout] test decision::tests::bash::single_denied_program ... ok
[INFO] [stdout] test decision::tests::bash::single_unlisted_program ... ok
[INFO] [stdout] test decision::tests::bash::wrapper_command_deny ... ok
[INFO] [stdout] test decision::tests::bash::wrapper_env_deny ... ok
[INFO] [stdout] test decision::tests::bash::single_ask_program ... ok
[INFO] [stdout] test decision::tests::bash::parse_error_returns_ask ... ok
[INFO] [stdout] test decision::tests::bash::no_programs_extracted_returns_ask ... ok
[INFO] [stdout] test decision::tests::bash::wrapper_env_p_deny ... ok
[INFO] [stdout] test decision::tests::bash::wrapper_env_with_opts_deny ... ok
[INFO] [stdout] test decision::tests::bash::wrapper_env_split_string_deny ... ok
[INFO] [stdout] test decision::tests::bash::wrapper_nested_deny ... ok
[INFO] [stdout] test decision::tests::bash::wrapper_exec_a_deny ... ok
[INFO] [stdout] test decision::tests::bash::wrapper_env_u_deny ... ok
[INFO] [stdout] test decision::tests::bash::wrapper_nohup_deny ... ok
[INFO] [stdout] test decision::tests::files::file_ask_beats_allow ... ok
[INFO] [stdout] test decision::tests::files::file_bypass_mode_ask_to_allow ... ok
[INFO] [stdout] test decision::tests::bash::config_edit_returns_none ... ok
[INFO] [stdout] test decision::tests::files::file_edit_outside_cwd_ask ... ok
[INFO] [stdout] test decision::tests::files::file_glob_no_path_defaults_to_cwd ... ok
[INFO] [stdout] test decision::tests::files::file_cwd_variable_expansion ... ok
[INFO] [stdout] test decision::tests::files::file_deny_beats_ask_beats_allow ... ok
[INFO] [stdout] test decision::tests::files::file_missing_file_path_fail_closed ... ok
[INFO] [stdout] test decision::tests::files::file_glob_explicit_path_inside_cwd ... ok
[INFO] [stdout] test decision::tests::files::file_bypass_mode_allow_stays_allow ... ok
[INFO] [stdout] test decision::tests::files::file_missing_file_path_write_fail_closed ... ok
[INFO] [stdout] test decision::tests::files::file_no_files_config_returns_none ... ok
[INFO] [stdout] test decision::tests::files::file_operation_mismatch_returns_none ... ok
[INFO] [stdout] test decision::tests::bash::config_glob_returns_none ... ok
[INFO] [stdout] test decision::tests::files::file_grep_explicit_path ... ok
[INFO] [stdout] test decision::tests::files::file_read_in_cwd_allow ... ok
[INFO] [stdout] test decision::tests::files::file_dont_ask_mode_ask_to_deny ... ok
[INFO] [stdout] test decision::tests::bash::config_read_returns_none ... ok
[INFO] [stdout] test decision::tests::bash::config_write_returns_none ... ok
[INFO] [stdout] test decision::tests::files::file_config_with_both_bash_and_files ... ok
[INFO] [stdout] test decision::tests::files::file_home_variable_expansion ... ok
[INFO] [stdout] test decision::tests::bash::wrapper_env_allow ... ok
[INFO] [stdout] test decision::tests::files::file_dont_ask_mode_deny_stays_deny ... ok
[INFO] [stdout] test decision::tests::files::file_bypass_mode_deny_stays_deny ... ok
[INFO] [stdout] test decision::tests::files::file_relative_path_normalized_to_cwd ... ok
[INFO] [stdout] test decision::tests::files::file_tilde_expansion ... ok
[INFO] [stdout] test decision::tests::files::file_write_to_denied_path ... ok
[INFO] [stdout] test decision::tests::files::unknown_tool_with_files_config_returns_none ... ok
[INFO] [stdout] test decision::tests::reason::reason_multi_deny ... ok
[INFO] [stdout] test decision::tests::reason::reason_single_ask ... ok
[INFO] [stdout] test decision::tests::reason::reason_single_deny ... ok
[INFO] [stdout] test decision::tests::reason::reason_unlisted_triggers_ask_with_listed ... ok
[INFO] [stdout] test decision::tests::reason::file_reason_deny ... ok
[INFO] [stdout] test decision::tests::reason::reason_single_allow ... ok
[INFO] [stdout] test decision::tests::reason::reason_dont_ask_multi_converts_ask_to_deny ... ok
[INFO] [stdout] test decision::tests::reason::file_reason_ask ... ok
[INFO] [stdout] test domain::flag::tests::eq_str_works ... ok
[INFO] [stdout] test decision::tests::reason::file_reason_allow ... ok
[INFO] [stdout] test decision::tests::reason::reason_bypass_converts_ask_to_allow ... ok
[INFO] [stdout] test decision::tests::reason::reason_explicit_deny_not_affected_by_mode_text ... ok
[INFO] [stdout] test decision::tests::reason::reason_multi_ask ... ok
[INFO] [stdout] test decision::tests::reason::reason_multi_allow ... ok
[INFO] [stdout] test decision::tests::reason::file_reason_fail_closed ... ok
[INFO] [stdout] test decision::tests::reason::reason_dont_ask_converts_ask_to_deny ... ok
[INFO] [stdout] test decision::tests::reason::file_reason_dont_ask_mode ... ok
[INFO] [stdout] test domain::flag::tests::new_already_dashed_long_unchanged ... ok
[INFO] [stdout] test domain::flag::tests::new_bare_multi_char_gets_double_dash ... ok
[INFO] [stdout] test domain::path::tests::new_absolute_path_unchanged ... ok
[INFO] [stdout] test domain::path::tests::new_dotdot_collapses ... ok
[INFO] [stdout] test domain::flag::tests::new_already_dashed_single_unchanged ... ok
[INFO] [stdout] test domain::path::tests::new_relative_prepends_cwd ... ok
[INFO] [stdout] test domain::flag::tests::new_bare_single_char_gets_dash ... ok
[INFO] [stdout] test domain::path::tests::new_root_stays_root ... ok
[INFO] [stdout] test domain::path::tests::new_tilde_expands_home ... ok
[INFO] [stdout] test domain::program_name::tests::eq_ref_str_works ... ok
[INFO] [stdout] test domain::program_name::tests::eq_str_works ... ok
[INFO] [stdout] test domain::program_name::tests::new_absolute_path_extracts_basename ... ok
[INFO] [stdout] test domain::program_name::tests::new_simple_name_unchanged ... ok
[INFO] [stdout] test domain::program_name::tests::new_trailing_slash_yields_empty ... ok
[INFO] [stdout] test domain::program_name::tests::new_relative_path_extracts_basename ... ok
[INFO] [stdout] test path::tests::matches_character_class_positive ... ok
[INFO] [stdout] test path::tests::matches_non_matching_pattern ... ok
[INFO] [stdout] test domain::path::tests::new_duplicate_slashes_collapsed ... ok
[INFO] [stdout] test domain::path::tests::new_trailing_slash_removed ... ok
[INFO] [stdout] test path::tests::matches_exact_path ... ok
[INFO] [stdout] test path::tests::matches_character_class_negative ... ok
[INFO] [stdout] test path::tests::matches_star_pattern ... ok
[INFO] [stdout] test path::tests::matches_double_star_pattern ... ok
[INFO] [stdout] test path::tests::normalize_relative_prepends_cwd ... ok
[INFO] [stdout] test path::tests::normalize_tilde_expands_home ... ok
[INFO] [stdout] test path::tests::matches_invalid_pattern_returns_err ... ok
[INFO] [stdout] test path::tests::normalize_absolute_path_unchanged ... ok
[INFO] [stdout] test path::tests::normalize_dot_relative_prepends_cwd ... ok
[INFO] [stdout] test path::tests::normalize_dotdot_collapses ... ok
[INFO] [stdout] test path::tests::matches_question_mark_single_char ... ok
[INFO] [stdout] test path::tests::matches_question_mark_no_match ... ok
[INFO] [stdout] test path::tests::normalize_duplicate_slashes ... ok
[INFO] [stdout] test path::tests::normalize_nested_dotdot_collapses ... ok
[INFO] [stdout] test path::tests::normalize_relative_dotdot ... ok
[INFO] [stdout] test path::tests::normalize_trailing_slash_removed ... ok
[INFO] [stdout] test protocol::input::tests::extra_fields_in_tool_input_are_preserved ... ok
[INFO] [stdout] test protocol::input::tests::all_permission_modes_deserialize ... ok
[INFO] [stdout] test protocol::input::tests::parse_minimal_hook_input ... ok
[INFO] [stdout] test protocol::output::tests::helper_allow_produces_correct_output ... ok
[INFO] [stdout] test protocol::output::tests::helper_deny_produces_correct_output ... ok
[INFO] [stdout] test protocol::output::tests::decision_severity_allow_less_than_ask_less_than_deny ... ok
[INFO] [stdout] test protocol::output::tests::hook_output_serializes_to_expected_json ... ok
[INFO] [stdout] test protocol::tool_use::tests::bash_empty_command ... ok
[INFO] [stdout] test protocol::input::tests::unknown_fields_are_ignored ... ok
[INFO] [stdout] test protocol::tool_use::tests::bash_extracts_command ... ok
[INFO] [stdout] test protocol::tool_use::tests::edit_extracts_file_path ... ok
[INFO] [stdout] test protocol::tool_use::tests::glob_empty_path_defaults_to_cwd ... ok
[INFO] [stdout] test protocol::tool_use::tests::glob_extracts_explicit_path ... ok
[INFO] [stdout] test protocol::tool_use::tests::glob_no_path_uses_cwd ... ok
[INFO] [stdout] test protocol::tool_use::tests::grep_empty_path_defaults_to_cwd ... ok
[INFO] [stdout] test protocol::tool_use::tests::bash_missing_command_yields_none ... ok
[INFO] [stdout] test protocol::tool_use::tests::bash_file_operation_returns_none ... ok
[INFO] [stdout] test protocol::tool_use::tests::grep_extracts_explicit_path ... ok
[INFO] [stdout] test protocol::tool_use::tests::grep_no_path_uses_cwd ... ok
[INFO] [stdout] test protocol::tool_use::tests::mcp_tool_is_unknown ... ok
[INFO] [stdout] test protocol::tool_use::tests::read_empty_string_file_path_returns_empty_paths ... ok
[INFO] [stdout] test protocol::tool_use::tests::read_extracts_file_path ... ok
[INFO] [stdout] test protocol::tool_use::tests::read_missing_file_path_returns_empty_paths ... ok
[INFO] [stdout] test protocol::tool_use::tests::read_wrong_type_file_path_returns_empty_paths ... ok
[INFO] [stdout] test protocol::tool_use::tests::unknown_tool ... ok
[INFO] [stdout] test protocol::tool_use::tests::unknown_file_paths_returns_none ... ok
[INFO] [stdout] test protocol::tool_use::tests::write_extracts_file_path ... ok
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/claude_permissions_hook-b270d85bca6965de)
[INFO] [stdout] test protocol::output::tests::helper_ask_produces_correct_output ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 364 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.26s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/cli_contract.rs (/opt/rustwide/target/debug/deps/cli_contract-f8ed14fb8d1fc46d)
[INFO] [stdout] 
[INFO] [stdout] running 16 tests
[INFO] [stdout] test contract_malformed_json_returns_ask ... ok
[INFO] [stdout] test contract_decision_is_valid_enum ... ok
[INFO] [stdout] test contract_hook_event_name_is_pre_tool_use ... ok
[INFO] [stdout] test contract_exit_code_zero_on_empty_stdin ... ok
[INFO] [stdout] test contract_empty_stdin_returns_ask ... ok
[INFO] [stdout] test contract_no_opinion_returns_empty_json_object ... ok
[INFO] [stdout] test contract_output_is_valid_json ... ok
[INFO] [stdout] test contract_config_parse_failure_returns_ask ... ok
[INFO] [stdout] test contract_no_stderr_on_error_input ... ok
[INFO] [stdout] test contract_decision_reason_is_string ... ok
[INFO] [stdout] test contract_no_stderr_on_normal_operation ... ok
[INFO] [stdout] test contract_exit_code_zero_on_normal_input ... ok
[INFO] [stdout] test contract_exit_code_zero_on_malformed_json ... ok
[INFO] [stdout] test contract_with_config_has_same_shape ... ok
[INFO] [stdout] test contract_missing_tool_input_fields_returns_ask ... ok
[INFO] [stdout] test contract_output_has_hook_specific_output ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 11 tests
[INFO] [stderr]      Running tests/cli_flows.rs (/opt/rustwide/target/debug/deps/cli_flows-eb565f8372647e78)
[INFO] [stdout] test flow_file_read_deny ... ok
[INFO] [stdout] test flow_file_read_allow ... ok
[INFO] [stdout] test flow_mode_bypass_converts_ask_to_allow ... ok
[INFO] [stdout] test flow_home_unset_file_tool_returns_valid_json ... ok
[INFO] [stdout] test flow_multi_command_pipe_highest_severity_wins ... ok
[INFO] [stdout] test flow_bash_unlisted ... ok
[INFO] [stdout] test flow_bash_ask ... ok
[INFO] [stdout] test flow_file_write_ask ... ok
[INFO] [stdout] test flow_bash_allow ... ok
[INFO] [stdout] test flow_bash_deny ... ok
[INFO] [stdout] test flow_mode_dontask_converts_ask_to_deny ... ok
[INFO] [stdout] 
[INFO] [stderr]      Running tests/cli_test.rs (/opt/rustwide/target/debug/deps/cli_test-2008ce8e76f5d859)
[INFO] [stdout] test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 9 tests
[INFO] [stdout] test ft_compat_mixed_config_bash_uses_bash_rules ... ok
[INFO] [stdout] test ft_compat_files_only_config_bash_tool ... ok
[INFO] [stdout] test ft_edit_cwd_allow ... ok
[INFO] [stdout] test invalid_config_path_returns_ask_with_error ... ok
[INFO] [stdout] test ft_write_cwd_allow ... ok
[INFO] [stdout] test no_config_all_tools_return_ask ... ok
[INFO] [stdout] test ft_compat_mixed_config_file_uses_file_rules ... ok
[INFO] [stdout] test edge_empty_command ... ok
[INFO] [stderr]      Running tests/diff_harness.rs (/opt/rustwide/target/debug/deps/diff_harness-c9d94822f93b2d10)
[INFO] [stdout] test edge_flag_expansion_r_space_f ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test golden_replay_all ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.16s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/generate_golden.rs (/opt/rustwide/target/debug/deps/generate_golden-e369b4abcaef3bdf)
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test generate_golden_corpus ... ignored
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests claude_permissions_hook
[INFO] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test src/config/mod.rs - config::Config::load (line 45) - compile ... ok
[INFO] [stdout] test src/decision/mod.rs - decision::evaluate (line 23) ... ok
[INFO] [stdout] test src/protocol/output.rs - protocol::output::HookOutput::allow (line 15) ... ok
[INFO] [stdout] test src/protocol/tool_use.rs - protocol::tool_use::ToolUse::parse (line 52) ... ok
[INFO] [stdout] test src/config/mod.rs - config::Config::parse (line 60) ... ok
[INFO] [stdout] test src/protocol/output.rs - protocol::output::HookOutput::deny (line 43) ... ok
[INFO] [stdout] test src/protocol/output.rs - protocol::output::HookOutput::ask (line 29) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.08s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "90f6861c92beeedbfc0005f6732868ece8db1c2aef4631e60162525d2cadccc6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "90f6861c92beeedbfc0005f6732868ece8db1c2aef4631e60162525d2cadccc6", kill_on_drop: false }`
[INFO] [stdout] 90f6861c92beeedbfc0005f6732868ece8db1c2aef4631e60162525d2cadccc6
